package com.cskaoyan.javase.array._4operator._0traverser;

/**
 * @description: 数组的遍历
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 数组的遍历: 把数组的元素从头到尾访问一遍就是遍历
 *
 * 总结数组的遍历: 我们在写代码时,不能追求一蹴而就,代码都不是一次性写完的,一边写一边测试一边改
 *      逐步迭代,达到最佳的效果
 *
 */
public class Demo {
    public static void main(String[] args) {
        int[] arr = {666, 777, 888};
        //arr = new int[]{};
        arr = null;
        //使用循环遍历数组
        //for (int i = 0; i < 3; i++) {
        //    System.out.println(arr[i]);
        //}
        //改进一下: 使用i<数组的长度
        //使用方法来复用代码
        traverse5(arr);
    }

    //提取出数组遍历的方法
    public static void traverse(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    //改进1: 让遍历的结果更好看,遍历结果是[666,777,888]
    public static void traverse2(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            //判断是最后一个元素,然后不加,
            //if (i == arr.length - 1) {
            //    System.out.print(arr[i]);
            //    break;
            //}
            System.out.print(arr[i] + ",");
        }
        System.out.print("\b]");
        //System.out.print("]");
    }

    //改进2: 让方法能够接收长度为0的数组的输入,并且希望结果是[]
    public static void traverse3(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            //判断是最后一个元素,然后不加,
            if (i == arr.length - 1) {
                System.out.print(arr[i]);
                break;
            }
            System.out.print(arr[i] + ",");
        }
        System.out.print("]");
    }

    //改进3: 让方法能够接收null数组输入,然后不会抛出异常终止程序,并且能够给用户友好的提示
    public static void traverse4(int[] arr) {
        //在方法的最上面加一个判断,让不等于null的时候,才执行下列语句
        if (arr != null) {
            System.out.print("[");
            for (int i = 0; i < arr.length; i++) {
                //判断是最后一个元素,然后不加,
                if (i == arr.length - 1) {
                    System.out.print(arr[i]);
                    break;
                }
                System.out.print(arr[i] + ",");
            }
            System.out.print("]");
            return;
        }
        System.out.println("您输入的数组数据有误,请重新输入!");
    }

    //改进代码结构: if不要判断!=null,判断==null
    public static void traverse5(int[] arr) {
        //在方法的最上面加一个判断,让不等于null的时候,才执行下列语句
        if (arr == null) throw new IllegalArgumentException("您输入的数组数据有误,请重新输入!");
        //System.out.println("您输入的数组数据有误,请重新输入!");
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            //判断是最后一个元素,然后不加,
            if (i == arr.length - 1) {
                System.out.print(arr[i]);
                break;
            }
            System.out.print(arr[i] + ",");
        }
        System.out.print("]");
        return;
    }

}
